482. 密钥格式化
482. 密钥格式化
Similar Question
leading to the advanced question
Solution Tips
方案一: 模拟
var licenseKeyFormatting = function(s, k) {
const ans = [];
let cnt = 0;
for (let i = s.length - 1; i >= 0; i--) {
if (s[i] !== '-') {
cnt++;
ans.push(s[i].toUpperCase());
if (cnt % k === 0) {
ans.push("-");
}
}
}
if (ans.length > 0 && ans[ans.length - 1] === '-') {
ans.pop();
}
return ans.reverse().join('');
};
方案二: 正则匹配
/**
* @param {string} s
* @param {number} k
* @return {string}
*/
var licenseKeyFormatting = function(s, k) {
// 可以使用正则, 类似数字千分位分割的逻辑
// 也可以先把 - 都去除, 然后反向遍历在 k 处添加 - , 同时进行大小写转换
// 用正则方案吧, 熟悉一下, 但是正则好像不能动态参数
// 正则方案性能好差
s = s.replaceAll('-', '').toUpperCase();
const regex = new RegExp(`(?!^)(?=(\\w{${k}})+$)`, 'g');
return s.replace(regex, '-');
};
console.log(licenseKeyFormatting('5F3Z-2e-9-w', 4))
console.log(licenseKeyFormatting('2-5g-3-J', 2))